package org.nw.utils;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.nw.web.utils.WebUtils;

import com.uft.webnc.util.DateUtils;

/**
 * 系统变量操作类
 * 
 * @author xuqc
 * @date 2011-5-27
 */
public class VariableHelper {

	/**
	 * 系统变量，目前使用在模板的默认值中.
	 */

	public static Map<String, Object> getVariables() {
		/**
		 * 这里定义的key都使用小写，实际使用的时候不分大小写
		 */
		Map<String, Object> sys_variable = new HashMap<String, Object>();
		if(WebUtils.getLoginInfo() != null) {
			sys_variable.put("#sys_corp#", WebUtils.getLoginInfo().getPk_corp());// 当前登陆公司
			sys_variable.put("#sys_user#", WebUtils.getLoginInfo().getPk_user());// 当前用户
			sys_variable.put("#sys_dept#", WebUtils.getLoginInfo().getPk_dept());// 当前部门
		}

		sys_variable.put("#sys_year#", DateUtils.getYear());
		sys_variable.put("#sys_date#", DateUtils.getCurrentDate());

		sys_variable.put("#sys_firstdayofprevmonth#", getFirstdayofprevmonth());
		sys_variable.put("#sys_firstdayofmonth#", getFirstdayofmonth());
		sys_variable.put("#sys_lastdayofmonth#", getLastdayofmonth());
		sys_variable.put("#sys_lastmonthdate#", getLastmonthdate());
		return sys_variable;
	}

	/**
	 * 返回上个月的今天
	 * 
	 * @return
	 */
	public static String getLastmonthdate() {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1);
		return DateUtils.formatDate(cal.getTime(), DateUtils.DATEFORMAT_HORIZONTAL);
	}

	/**
	 * 返回当前登录时间的上月的第一天
	 * 
	 * @return
	 */
	public static String getFirstdayofprevmonth() {
		String date;
		if(WebUtils.getLoginInfo() != null) {
			date = WebUtils.getLoginInfo().getLoginDate();
		} else {
			date = DateUtils.getCurrentDate();
		}
		Date prevmonthDate = DateUtils.addMonth(DateUtils.parseString(date), -1);
		date = DateUtils.formatDate(prevmonthDate, DateUtils.DATEFORMAT_HORIZONTAL);
		date = date.substring(0, 7);
		date += "-01";
		return date;
	}

	/**
	 * 返回当前月的第一天
	 * 
	 * @return
	 */
	public static String getFirstdayofmonth() {
		String date = DateUtils.getCurrentDate();
		date = date.substring(0, 7);
		date += "-01";
		return date;
	}

	/**
	 * 返回当前月的最后一天
	 * 
	 * @return
	 */
	public static String getLastdayofmonth() {
		Calendar cal = Calendar.getInstance();
		cal.setTime(new Date());
		int value = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		cal.set(Calendar.DAY_OF_MONTH, value);
		return DateUtils.formatDate(cal.getTime(), DateUtils.DATEFORMAT_HORIZONTAL);
	}

	/**
	 * 根据key从系统变量中查找对应的值，若查不到，返回自身
	 * 
	 * @param key
	 * @return
	 */
	public static String resolve(String key) {
		if(StringUtils.isBlank(key)) {
			// 这里返回null，null值不会序列化到前台，前台不用调用setValue操作
			return null;
		}

		String _key = key.toLowerCase();
		if(VariableHelper.getVariables().get(_key.trim()) != null) { //
			return VariableHelper.getVariables().get(_key.trim()).toString();
		} else {
			// 如果从系统变量中找不到对应的值，则使用其自身
			return key;
		}
	}

	public static void main(String[] args) {
		Date prevmonthDate = DateUtils.addMonth(DateUtils.parseString("2011-01-01"), -1);
		String date = DateUtils.formatDate(prevmonthDate, DateUtils.DATEFORMAT_HORIZONTAL);
		date = date.substring(0, 7);
		date += "-01";
		System.out.println(date);
		System.out.println(getLastmonthdate());
	}
}
